package com.myapp.struts.action;

import com.myapp.hibernate.model.Usuario;
import com.myapp.hibernate.util.UsuarioUtil;
import com.myapp.struts.form.LoginForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

public class RegistroAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String INPUT = "init";

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        LoginForm formulario = (LoginForm) form;
        UsuarioUtil usuarioUtil = new UsuarioUtil();

        //validar que las dos contraseñas sean iguales
        if (formulario.getPass2().equals(formulario.getPass())) {
            Usuario nuevo = new Usuario(formulario.getNombre(), formulario.getApellidos(), formulario.getEmail(), formulario.getPass(), 0);

            //comprobamos que no haya ningun usuario con el mismo email
            if (usuarioUtil.obtenerUsuarioPorEmail(formulario.getEmail()) == null) {
                //si la consulta da un error -> no existe el usuario -> se crea uno nuevo
                usuarioUtil.guardar(nuevo);
                nuevo.enviaEmail();
                //enviamos tambien un mensaje informativo
                request.getSession().setAttribute("informacion", "Usuario creado correctamente");
                return mapping.findForward(SUCCESS);
            } else {
                ActionErrors errors = new ActionErrors();
                errors.add("existe", new ActionMessage("error.existe"));
                saveErrors(request, errors);
                return mapping.findForward(INPUT);
            }
        } else {
            ActionErrors errors = new ActionErrors();
            errors.add("pass2", new ActionMessage("error.pass2"));
            saveErrors(request, errors);
            return mapping.findForward(INPUT);
        }
    }
}
